package ui;

import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

public class GameJFrame extends JFrame implements KeyListener , ActionListener {
    //GameJFrame 游戏主界面
    //创建二位数组 加载图片时根据二维数组中的数据进行加载
    int[][]data=new int[3][3];
    int x=0;int y=0;//记录空白块的位置

    int [][] win={
            {1,2,3},
            {4,5,6},
            {7,8,0}
    };
    int step=0;//统计步数
    //选项下的条目对象
    JMenuItem replayItem=new JMenuItem("重新游戏");
    JMenuItem reLoginItem=new JMenuItem("重新登录");
    JMenuItem closeItem=new JMenuItem("关闭游戏");
    JMenuItem accountItem=new JMenuItem("首充");

    public GameJFrame(){
        //初始化界面
        initJFrame();

        //初始化菜单
        initJMenuBar();

        //初始化数据
        initdata();

        //初始化图片
        initImage();
        this.setVisible(true);

    }

    private void initdata() {//初始化数据
        int []tempArr={0,1,2,3,4,5,6,7,8};
        Random r=new Random();
        for (int i = 0; i < tempArr.length; i++) {
            int index=r.nextInt(tempArr.length);
            int a=tempArr[i];
            tempArr[i]=tempArr[index];
            tempArr[index]=a;
        }

        for (int i = 0; i < tempArr.length; i++) {
            if(tempArr[i]==0){
                x=i/3;
                y=i%3;
            }
                data[i/3][i%3]=tempArr[i];
        }

    }//初始化数据

    private void initImage() {
        this.getContentPane().removeAll();//清空原本的图片
        if(victory()){
            JLabel winJLabel =new JLabel(new ImageIcon("D:\\workspace\\xiaoyouxi\\t\\win.png"));
            winJLabel.setBounds(1,1,500,300);
            this.getContentPane().add(winJLabel);
        }
        JLabel stepCount=new JLabel("步数"+step);
        stepCount.setBounds(80,40,100,100);
        this.getContentPane().add(stepCount);

        //图片对象
        //创建一个JLabel的对象（管理容器）
        //把管理容器添加到界面中
        //指定图片的位置
        for (int i = 0; i< 3; i++) {
            for (int j= 0; j < 3; j++) {
                //获取当前要加载的图片的序号
                int num=data[i][j];
                JLabel jLabel=new JLabel(new ImageIcon("D:\\workspace\\xiaoyouxi\\t\\"+num+".png"));
                jLabel.setBounds(48*j+100,48*i+100,48,48);
                //添加边框
                jLabel.setBorder(new BevelBorder(0));

                this.getContentPane().add(jLabel);

            }
        }
        ImageIcon bg=new ImageIcon("D:\\workspace\\xiaoyouxi\\t\\9.png");
        JLabel background=new JLabel(bg);
        background.setBounds(1,1,500,500);
        this.getContentPane().add(background);
        //先加载的图片在上方
        //刷新一下界面
        this.getContentPane().repaint();

    }//初始化图片

    private void initJMenuBar() {
        JMenuBar jMenuBar= new JMenuBar();
        //功能
        JMenu functionJMenu=new JMenu("功能");
        JMenu aboutJMenu=new JMenu("下一关");


        //将每一个选项下的条目添加到选项当中
        functionJMenu.add(replayItem);
        functionJMenu.add(reLoginItem);
        functionJMenu.add(closeItem);

        aboutJMenu.add(accountItem);

        replayItem.addActionListener(this);
        reLoginItem.addActionListener(this);
        closeItem.addActionListener(this);
        accountItem.addActionListener(this);
        //将两个主选项添加到菜单中
        jMenuBar.add(functionJMenu);
        jMenuBar.add(aboutJMenu);

        //给整个界面这种菜单
        this.setJMenuBar(jMenuBar);
    }//界面

    private void initJFrame() {
        this.setSize(360,405);
        //标题
        this.setTitle("");
        //置顶
        this.setAlwaysOnTop(true);
        //居中
        this.setLocationRelativeTo(null);
        //关闭
        this.setDefaultCloseOperation(3);
        this.setLayout(null);
        this.addKeyListener(this);
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }
//按下不送是调用这个方法
    @Override
    public void keyPressed(KeyEvent e) {

        int code=e.getKeyCode();
        //a-65
        if(code==65){
            //把界面中的所有图片删除
            this.getContentPane().removeAll();
            //加载另一张
            JLabel all=new JLabel(new ImageIcon("D:\\workspace\\xiaoyouxi\\t\\10.png"));
            all.setBounds(1,1,300,300);
            this.getContentPane().add(all);
            //加载背景
            ImageIcon bg=new ImageIcon("D:\\workspace\\xiaoyouxi\\t\\9.png");
            JLabel background=new JLabel(bg);
            background.setBounds(1,1,500,500);
            this.getContentPane().add(background);
            this.getContentPane().repaint();

        }
    }

    @Override
    public void keyReleased(KeyEvent e) {

        if(victory()){
            return;
        }
        int code =e.getKeyCode();
      if(code==37){
          System.out.println("左");
          if(y==2){
              return;
          }
          data[x][y]=data[x][y+1];
          data[x][y+1]=0;
          y++;
          step++;
          initImage();
      }else if(code==38){
          System.out.println("上");
          if(x==2){//最下方。有bug
              return ;
          }
          data[x][y]=data[x+1][y];
          data[x+1][y]=0;
          x++;
          step++;
          initImage();
      }else if(code==39){
          System.out.println("右");
          if(y==0){
              return;
          }
          data[x][y]=data[x][y-1];
          data[x][y-1]=0;
          y--;
          step++;
          initImage();
      }else if(code==40){
          System.out.println("下");
          if(x==0){
              return;
          }
          data[x][y]=data[x-1][y];
          data[x-1][y]=0;
          x--;
          step++;
          initImage();
      }else if(code==65){
          initImage();
      }else if(code==87){
          data=new int[][]{
                  {1,2,3},
                  {4,5,6},
                  {7,8,0}
          };
          initImage();
      }
   }//上下左右移动实现

    public boolean victory(){
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                if(data[i][j]!=win[i][j]){
                    return false;
                }
            }
        }
        return true;
    }//判断胜利

    @Override
    public void actionPerformed(ActionEvent e) {
         Object obj=e.getSource();
         if(obj==replayItem){
             System.out.println("重新");
             //计步器清零
             step=0;
             //再次打乱二维数组中的数据
             initdata();
             //重新加载图片
             initImage();

         }else if(obj==reLoginItem){
             System.out.println("重新登录");
             this.setVisible(false);
             new LoginJFrame();
         }else if(obj==closeItem){
             System.out.println("关闭");
             System.exit(0);
         }else if(obj==accountItem){
             System.out.println("首充 ");
             JDialog jDialog=new JDialog();//弹框对象
             JLabel jLabel=new JLabel(new ImageIcon("D:\\workspace\\xiaoyouxi\\t\\pay.png"));
             jLabel.setBounds(0,0,700,900);
             jDialog.getContentPane().add(jLabel);//添加
             jDialog.setSize(800,900);
             jDialog.setAlwaysOnTop(true);//置顶
             jDialog.setLocationRelativeTo(null);//居中
             jDialog.setModal(true);
             jDialog.setVisible(true);
         }
    }
}
